/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package controlador;

import Beans.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ServletEmpleado extends HttpServlet {

    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        
        HttpSession session = request.getSession();        
        String accion =request.getParameter("accion");
        
        try {
            if(accion.equals("I"))
            {
                
               String per_dni =request.getParameter("per_dni");               
               
               String per_nombre = request.getParameter("per_nombre");               
               String per_apeMat = request.getParameter("per_apematerno");
               String per_apePat = request.getParameter("per_apepaterno");
               String direccion = request.getParameter("per_direccion");
               boolean crearuser = false;
               if(request.getParameter("per_crearuser") != null)
               {    crearuser = true;
               }
               Integer car_idcargo = Integer.parseInt(request.getParameter("car_idcargo"));               
               
                ModEmp_Persona bus_per = new ModEmp_Persona().listarPersona_One(per_dni);
               if(bus_per.getIdpersona()==0 || bus_per.isEliminado()==true){
                   
                  //INSERTAR NUEVA PERSONA                   
                  ModEmp_Persona new_per = new ModEmp_Persona();
                  new_per.setIdpersona(0);
                  new_per.setNombre(per_nombre);
                  new_per.setNumerodocumento(per_dni);
                  new_per.setApepaterno(per_apePat);
                  new_per.setApematerno(per_apeMat);
                  new_per.setDireccion(direccion);
                  new_per.setFk_tipodocumento(1);
                  new_per.setAccion("I");
                  Integer ope_new_per = 0;
                  ope_new_per = new_per.operaciones(new_per);
                  
                  if(session.getAttribute("sesCorreo") != null){
                    List<ModEmp_Correo> listCorr = (List<ModEmp_Correo>) session.getAttribute("sesCorreo");
                    for (int i = 0; i < listCorr.size(); i++){
                        ModEmp_Correo correo = listCorr.get(i);
                        correo.setAccion("I");
                        correo.setFk_id_persona(ope_new_per);
                        Integer ope_correo = correo.operaciones(correo);
                        if(ope_correo==0){/*ERROR*/ }
                    }                   
                  }
                  if(session.getAttribute("sesTelefono") != null){
                    List<ModEmp_Telefono> listTel = (List<ModEmp_Telefono>) session.getAttribute("sesTelefono");
                    for (int i = 0; i < listTel.size(); i++){
                        ModEmp_Telefono telefono = listTel.get(i);
                        telefono.setAccion("I");
                        telefono.setFk_id_persona(ope_new_per);
                        Integer ope_tel = telefono.operaciones(telefono);
                        if(ope_tel==0){/*ERROR*/ }
                    }                   
                  }
                  
                  ModEmp_Empleado new_Empleado = new ModEmp_Empleado();
                  new_Empleado.setIdempleado(0);
                  new_Empleado.setFk_idcargo(car_idcargo);
                  new_Empleado.setAccion("I");
                  new_Empleado.setFk_idpersona(ope_new_per);
                  
                  Integer ope_new_emp=new_Empleado.operaciones(new_Empleado); 
                  if(ope_new_emp!=0)
                  {   if(crearuser==true)
                      { ModSeg_Usuario us = new ModSeg_Usuario();
                        ModEmp_Persona per = new ModEmp_Persona().obtenerPersona(ope_new_per);
                        String user = per.crearUsuario(per.getNombre(), per.getApepaterno(), per.getApematerno());
                        String pass = per.crearContraseña(per.getNombre(), per.getApepaterno(), per.getNumerodocumento());
                        us.setIdusuario(0);
                        us.setPassword(pass);
                        us.setFk_idempleado(ope_new_emp);
                        us.setFk_idrol(0);
                        us.setUsuario(user);
                        us.setFk_idusuario_crea(Integer.parseInt(request.getParameter("userCrea")));
                        us.setFk_idusuario_mod(0);
                        us.setAccion("I");
                        int r = us.operaciones(us);
                        if(r != 0)
                        {   response.sendRedirect("modulos/empleado/newEditEmpleado.jsp?msg=Se registro correctamente el nuevo Empleado.&newuser="+user+"&newpass=+"+pass);
                        }
                      } else
                      { response.sendRedirect("modulos/empleado/newEditEmpleado.jsp?msg=Se registro correctamente el nuevo Empleado."); }                      
                  }
                  
               }
               if(bus_per.getIdpersona()!=0 && bus_per.isEliminado()==false){
                 
                  ModEmp_Empleado existe_empleado = new ModEmp_Empleado().listarEmpleado_One(bus_per.getIdpersona());
                  if(existe_empleado.getIdempleado()==0){
                      
                      if(session.getAttribute("sesCorreo") != null){
                        List<ModEmp_Correo> listCorr = (List<ModEmp_Correo>) session.getAttribute("sesCorreo");
                        for (int i = 0; i < listCorr.size(); i++){
                            ModEmp_Correo correo = listCorr.get(i);
                            correo.setAccion("I");
                            correo.setFk_id_persona(bus_per.getIdpersona());
                            Integer ope_correo = correo.operaciones(correo);
                            if(ope_correo==0){/*ERROR*/ }
                        }                   
                      }
                      if(session.getAttribute("sesTelefono") != null){
                        List<ModEmp_Telefono> listTel = (List<ModEmp_Telefono>) session.getAttribute("sesTelefono");
                        for (int i = 0; i < listTel.size(); i++){
                            ModEmp_Telefono telefono = listTel.get(i);
                            telefono.setAccion("I");
                            telefono.setFk_id_persona(bus_per.getIdpersona());
                            Integer ope_tel = telefono.operaciones(telefono);
                            if(ope_tel==0){/*ERROR*/ }
                        }                   
                      }
                      
                      //INSERTAR NUEVA EMPLEADO
                      
                      ModEmp_Empleado new_Empleado = new ModEmp_Empleado();
                      new_Empleado.setIdempleado(0);
                      new_Empleado.setFk_idcargo(car_idcargo);
                      new_Empleado.setFk_idpersona(bus_per.getIdpersona()); 
                      new_Empleado.setAccion("I");
                      Integer ope_new_empl=new_Empleado.operaciones(new_Empleado);
                      if(ope_new_empl!=0){
                          response.sendRedirect("modulos/empleado/newEditEmpleado.jsp?msg=Se registro correctamente el nuevo Empleado");
                      }
                  }
                  if(existe_empleado.getIdempleado()!=0){
                      //EMPLEADO YA EXISTE
                      response.sendRedirect("modulos/empleado/newEditEmpleado.jsp?msgA=Empleado existe..");
                  }
                  
               }
               
            }
            
            if(accion.equals("Correo")){
                List<ModEmp_Correo> listCorreo;
                if(session.getAttribute("sesCorreo") != null){
                    listCorreo = (List<ModEmp_Correo>) session.getAttribute("sesCorreo");
                }else{
                    listCorreo  = new ArrayList<ModEmp_Correo>();
                }
                String id = request.getParameter("id");
                if(id != null){
                    listCorreo.remove(Integer.parseInt(id));
                } else{
                    ModEmp_Correo correo = new ModEmp_Correo();
                    correo.setCorreo(request.getParameter("cor_correo"));                    
                    listCorreo.add(correo);
                }
                session.setAttribute("sesCorreo", listCorreo);
                
                out.printf("<table class='table table-bordered'>");
                out.printf("<tbody>");
                out.printf("</tbody>");
                out.printf("<tr>");
                out.printf("<th style='width:40px;text-align:center;'>N°</th>");
                out.printf("<th>Correo</th>");
                out.printf("<th style='width:100px;text-align:center;'>Acción</th>");
                out.printf("</tr>");
                ModEmp_Correo corr;
                for (int i = 0; i < listCorreo.size(); i++){
                    corr = listCorreo.get(i);
                out.printf("<tr>");
                out.printf("<th style='width:40px;text-align:center;'>" + (i+1) +"</th>");
                out.printf("<th>"+ corr.getCorreo()+"</th>");
                out.printf("<th style='text-align:center;'>");
                out.printf("<button type='button' class='btn btn-info btn-sm' onclick='eliminarCorreo(" + i + ")'>Quitar</button>");
                out.printf("</th>");
                out.printf("</tr>");
                }
                out.printf("</tbody>");   
                
                out.printf("</table>");               
                
            }
            
            if(accion.equals("Telefono")){
                
                   List<ModEmp_Telefono> listTelefono;
                if(session.getAttribute("sesTelefono") != null){
                    listTelefono = (List<ModEmp_Telefono>) session.getAttribute("sesTelefono");
                }else{
                    listTelefono  = new ArrayList<ModEmp_Telefono>();
                }
                String id = request.getParameter("id");
                if(id != null){
                    listTelefono.remove(Integer.parseInt(id));
                } else{
                    ModEmp_Telefono telefono = new ModEmp_Telefono();
                    telefono.setNumero(request.getParameter("id_telefono"));                    
                    listTelefono.add(telefono);
                }
                session.setAttribute("sesTelefono", listTelefono);
                
                out.printf("<table class='table table-bordered'>");
                out.printf("<tbody>");
                out.printf("</tbody>");
                out.printf("<tr>");
                out.printf("<th style='width:40px;text-align:center;'>N°</th>");
                out.printf("<th>TelÃ©fono</th>");
                out.printf("<th style='width:100px;text-align:center;'>Acción</th>");
                out.printf("</tr>");
                ModEmp_Telefono tel;
                for (int i = 0; i < listTelefono.size(); i++){
                    tel = listTelefono.get(i);
                out.printf("<tr>");
                out.printf("<th style='width:40px;text-align:center;'>" + (i+1) +"</th>");
                out.printf("<th>"+ tel.getNumero()+"</th>");
                out.printf("<th style='text-align:center;'>");
                out.printf("<button type='button' class='btn btn-info btn-sm' onclick='eliminarTelefono(" + i + ")'>Quitar</button>");
                out.printf("</th>");
                out.printf("</tr>");
                }
                out.printf("</tbody>");   
                
                out.printf("</table>"); 
            }
        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
